home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / info / hyperbole.info-2 < prev    next >
Encoding:
GNU Info File  |  1995-09-01  |  48.4 KB  |  1,131 lines

  1. This is Info file ../info/hyperbole.info, produced by Makeinfo-1.63
  2. from the input file hyperbole.texi.
  3.  
  4. 
  5. File: hyperbole.info,  Node: Operating Menus,  Next: Entering Arguments,  Prev: Window Configurations,  Up: Using Hyperbole
  6.  
  7. Operating Menus
  8. ===============
  9.  
  10.    Under InfoDock, XEmacs, and Emacs 19, pulldown and popup menus are
  11. available to invoke Hyperbole commands, including those from the rolodex
  12. and the outliner.  These menus operate like any other X window menus.
  13. Use the Quit command on the Hyperbole menubar menu to get rid of the
  14. menu if you do not need it.  Invoking Hyperbole again will add the menu
  15. back to the menubar.
  16.  
  17.    This section discusses only the specialized "Hyperbole menus" that
  18. appear in the minibuffer and that work with all Emacs versions.
  19. Hyperbole menu items may be selected from either the keyboard or via
  20. mouse clicks.  When used with the keyboard, they provide rapid command
  21. access similar to key bindings.
  22.  
  23.    The top level menu is invoked from a key given in your `hsite.el'
  24. file (by default, {`C-h h'}) or via an Action Key press in a location
  25. with no other action defined.  The menu will appear in the minibuffer
  26. and should look mostly like so:
  27.  
  28.      Hy>  Act  Butfile/  Doc/  Ebut/  Gbut/  Hist  Ibut/  Msg/  Otl/  Rolo/  Win/
  29.  
  30. The above menu items can be summarized as follows:
  31.  
  32. *Act*
  33.      Perform the action associated with any button at point or prompt
  34.      for the name of an explicit button to activate if point is not on
  35.      one.
  36.  
  37. *Butfile/*
  38.      Display a local or global file of buttons, providing easy access.
  39.      `HYPB' for a local button file and `~/.hyperb/HYPB' for your
  40.      global file.  These are good places to start your button creation
  41.      testing.
  42.  
  43. *Ebut/*
  44.      All explicit button commands.
  45.  
  46. *Doc/*
  47.      Hyperbole documentation quick access.  Contains Types/ submenu for
  48.      documentation on Hyperbole implicit button and action types.
  49.  
  50. *Gbut/*
  51.      All global button commands.  Global buttons are accessed by name
  52.      rather than by direct selection.
  53.  
  54. *Hist*
  55.      Jumps back to last position in button traversal history.
  56.  
  57. *Ibut/*
  58.      All implicit button commands.
  59.  
  60. *Msg/*
  61.      Hyperbole-specific mail and news messaging support commands.  Use
  62.      this to send mail to the Hyperbole discussion list or to
  63.      add/modify your entry on a Hyperbole mail list.
  64.  
  65. *Otl/*
  66.      Autonumbered, structured outliner and hyper-node manager commands.
  67.      *Note Outliner::.
  68.  
  69. *Rolo/*
  70.      Hierarchical, multi-file rolodex lookup and edit commands.  *Note
  71.      Rolodex::.
  72.  
  73. *Win/*
  74.      Window configuration management such as adding and restoring window
  75.      configurations by name. *Note Window Configurations::.
  76.  
  77.    All menu items are selected via the first character of their names
  78. (letter case does not matter) or via a press of the Action Key.  "/" at
  79. the end of an item name indicates that it brings up a sub-menu.  A press
  80. of the Assist Key on an item displays help for the item, including the
  81. action that it performs.
  82.  
  83.    While a menu is active, to re-activate the top-level Hyperbole menu,
  84. you must use {`C-t'}.  This allows you to browse the submenus and then
  85. return to the top.  You can quit without selecting an item by using
  86. {`q'}.  {`C-g'} aborts whether you are at a menu prompt or any other
  87. Hyperbole prompt.
  88.  
  89. 
  90. File: hyperbole.info,  Node: Entering Arguments,  Next: Working with Explicit Buttons,  Prev: Operating Menus,  Up: Using Hyperbole
  91.  
  92. Entering Arguments
  93. ==================
  94.  
  95.    Many Hyperbole commands prompt you for arguments.  The standard
  96. Hyperbole user interface has an extensive core of argument types that it
  97. recognizes.  Whenever Hyperbole is prompting you for an argument, it
  98. knows the type that it needs and provides some error checking to help
  99. you get it right.  More importantly, it allows you to press the Action
  100. Key within an entity that you want to use as an argument and it will
  101. grab the appropriate thing and show it to you at the input prompt
  102. within the minibuffer.  If you press the Action Key again at the same
  103. point (click with a mouse) on the same thing again, it accepts the
  104. entity as the argument and moves on.  Thus, a double click registers a
  105. desired argument.  Double-quoted strings, pathnames, mail messages,
  106. Info nodes, dired listings, buffers, numbers, completion items and so
  107. forth are all recognized at appropriate times.  All of the argument
  108. types mentioned in the documentation for the Emacs Lisp `(interactive)'
  109. function are recognized.  Experiment a little and you will quickly get
  110. used to this direct selection technique.
  111.  
  112.    Wherever possible, standard Emacs completion is offered, see *Note
  113. Completion: (emacs)Completion.  Remember to use {`?'} to see what your
  114. possibilities for an argument are.  Once you have a list of possible
  115. completions on screen, you can double click the Action Key on any one
  116. to enter it as the argument.
  117.  
  118. 
  119. File: hyperbole.info,  Node: Working with Explicit Buttons,  Next: Outliner,  Prev: Entering Arguments,  Up: Using Hyperbole
  120.  
  121. Working with Explicit Buttons
  122. =============================
  123.  
  124.    Explicit buttons provide the building blocks for creating personal or
  125. organizational hypertext networks with Hyperbole.  This section
  126. summarizes the user-level operations available for managing these
  127. buttons.
  128.  
  129. * Menu:
  130.  
  131. * Creation::
  132. * Renaming::
  133. * Deletion::
  134. * Modification::
  135. * Location::
  136. * Button Files::
  137. * Buttons in Mail::
  138. * Buttons in News::
  139.  
  140. 
  141. File: hyperbole.info,  Node: Creation,  Next: Renaming,  Prev: Working with Explicit Buttons,  Up: Working with Explicit Buttons
  142.  
  143. Creation
  144. --------
  145.  
  146. * Menu:
  147.  
  148. * Drags::            via Smart Mouse Key Drags
  149. * Menus::            via Hyperbole Menus
  150.  
  151. 
  152. File: hyperbole.info,  Node: Drags,  Next: Menus,  Prev: Creation,  Up: Creation
  153.  
  154. via Smart Mouse Key Drags
  155. .........................
  156.  
  157.    The most efficient way to create an explicit button interactively is
  158. to use the mouse Action Key to drag from a button source window to a
  159. window showing its link referent.  More specifically, you should split
  160. your current Emacs frame into two windows: one which contains the point
  161. at which you want a button to be inserted and another which shows the
  162. point to which you want to link.  Depress the mouse Action Key at the
  163. point at which the button should be inserted, drag to the other window
  164. and release it at the point of the link referent.  The process becomes
  165. quite simple with a little practice. (*Note via Hyperbole Menus: Menus,
  166. for a more detailed explanation of the explicit button creation
  167. process.)
  168.  
  169.    Hyperbole uses the link referent context to determine the type of
  170. link to make.  If there are a few different types of links which are
  171. applicable from the context, you will be prompted with a list of the
  172. types.  Simply use the Action Key or the first letter of the link type
  173. to select one of the type names and to finish the link creation.
  174. Hyperbole will then insert explicit button delimiters around the button
  175. label and will display a message in the minibuffer indicating both the
  176. button name and its action/link type.
  177.  
  178.    If you run Emacs under a window system, you can emulate an Action Key
  179. drag from the keyboard by: hitting {`M-o'}, the `hkey-operate' command,
  180. at the button source location, moving to the link destination, e.g.
  181. with {`C-x o'}, and then hitting {`M-o'} again.  This simulates a
  182. depress and then release of the Action Key.  {`C-u M-o'} emulates drags
  183. of the Assist Key.  This will not work when Hyperbole is run from a
  184. dumb terminal Emacs session since drag actions are not supported
  185. without a window system.
  186.  
  187. 
  188. File: hyperbole.info,  Node: Menus,  Prev: Drags,  Up: Creation
  189.  
  190. via Hyperbole Menus
  191. ...................
  192.  
  193.    You can alternatively use the Hyperbole menus to create explicit
  194. buttons.  First, mark a short region of text in any fashion allowed by
  195. GNU Emacs and then select the Hyperbole menu item sequence, Ebut/Create.
  196. You will be prompted for the button's label with the marked region as
  197. the default.  If you accept the default and enter the rest of the
  198. information you are prompted for, the button will be created within the
  199. current buffer and Hyperbole will surround the marked region with
  200. explicit button delimiters to indicate success.
  201.  
  202.    If you do not mark a region before invoking the button create
  203. command, you will be prompted for both a label and a target buffer for
  204. the button and the delimited label text will be inserted into the
  205. target buffer after a successful button creation.
  206.  
  207.    After Hyperbole has the button label and its target buffer, it will
  208. prompt you for an action type for the button.  Use the {`?'} completion
  209. help key to see the available types.  The type selected determines any
  210. following values for which you will be prompted.
  211.  
  212.    If a previous button with the same label exists in the same buffer,
  213. Hyperbole will add an "instance number" to the label when it adds the
  214. delimiters so that the name is unique.  Thus, you don't have to worry
  215. about accidental button name conflicts.  If you want the same button to
  216. appear in multiple places within the buffer, just enter the label again
  217. and delimit it yourself.  Hyperbole will interpret all occurrences of
  218. the same delimited label within a buffer as the same button.
  219.  
  220.    If you create link buttons using the Hyperbole menus, the best
  221. technique is to place on screen both the source buffer for the button
  222. and the buffer to which it will link.  Mark the region of text to use
  223. for your button label, invoke the button create command from the menu,
  224. choose an action type which begins with `link-to-' and then use the
  225. direct selection techniques mentioned in *Note Entering Arguments::, to
  226. select the link referent.
  227.  
  228. 
  229. File: hyperbole.info,  Node: Renaming,  Next: Deletion,  Prev: Creation,  Up: Working with Explicit Buttons
  230.  
  231. Renaming
  232. --------
  233.  
  234.    Once an explicit button has been created, its label text must be
  235. treated specially.  Any inter-word spacing within the label may be
  236. freely changed, as may happen when a paragraph is refilled.  But a
  237. special command must be invoked to rename it.
  238.  
  239.    The rename command operates in two different ways.  If point is
  240. within a button label when it is invoked, it will tell you to edit the
  241. button label and then invoke the rename command again.  The second
  242. invocation will actually rename the button.  If instead the command is
  243. originally invoked outside of any explicit button, it will prompt for
  244. the button label to replace and the label to replace it with and then
  245. will perform the rename.  All occurrences of the same button in the
  246. buffer will be renamed, so you need locate only one occurrence of the
  247. button.
  248.  
  249.    The rename command may be invoked from the Hyperbole menu via
  250. Ebut/Rename.  A faster method is to use a key bound to the
  251. `hui:ebut-rename' command.  Your site installation may include such a
  252. key.  `C-h w hui:ebut-rename RTN' should show you any key it is on.  If
  253. no key binding has been established or if you prefer one of your own,
  254. simply bind it within your `~/.emacs' file.  We recommend the {`C-c
  255. C-r'} key, as in:  `(global-set-key "\C-c\C-r" 'hui:ebut-rename)'.
  256.  
  257. 
  258. File: hyperbole.info,  Node: Deletion,  Next: Modification,  Prev: Renaming,  Up: Working with Explicit Buttons
  259.  
  260. Deletion
  261. --------
  262.  
  263.    Ebut/Delete works similarly to the Rename command but deletes the
  264. selected button.  The button's delimiters are removed to confirm the
  265. delete.  If the delete command is invoked with a prefix argument, then
  266. both the button label and the delimiters are removed as confirmation.
  267.  
  268.    Presently there is no way to recover a deleted button; it must be
  269. recreated.  Therefore, the HUI:EBUT-DELETE-CONFIRM-P variable is true
  270. by default, causing Hyperbole to require confirmation before
  271. interactively deleting explicit buttons.  Set it to nil if you prefer no
  272. confirmation.
  273.  
  274. 
  275. File: hyperbole.info,  Node: Modification,  Next: Location,  Prev: Deletion,  Up: Working with Explicit Buttons
  276.  
  277. Modification
  278. ------------
  279.  
  280.    Ebut/Modify prompts you with each of the elements from the button's
  281. data list and allows you to modify each in turn.
  282.  
  283.    There is a quicker way to modify explicit link buttons.  Simply drag
  284. with the mouse Action Key from within the button label to a link
  285. destination in a different window, just as you would when creating a
  286. new button with a mouse drag.  Remember that drags may also be emulated
  287. from the keyboard.  *Note Creation::.
  288.  
  289. 
  290. File: hyperbole.info,  Node: Location,  Next: Button Files,  Prev: Modification,  Up: Working with Explicit Buttons
  291.  
  292. Location
  293. --------
  294.  
  295.    The Ebut/Help menu can be used to summarize a single explicit button
  296. or all such buttons within a single buffer.  The buttons summarized may
  297. then be activated directly from the summary.
  298.  
  299.    Ebut/Help/BufferButs summarizes the explicit buttons in the order in
  300. which they appear in the buffer.  Ebut/Help/CurrentBut summarizes only
  301. the button at point.  Ebut/Help/OrderedButs summarizes the buttons in
  302. alphabetical order.  All of these summary commands eliminate duplicate
  303. instances of buttons from their help displays.
  304.  
  305.    Ebut/Search prompts for a search pattern and searches across all the
  306. locations in which you have previously created explicit buttons.  It
  307. asks you whether to match to any part of a button label or only complete
  308. labels.  It then displays a list of button matches with a single line of
  309. surrounding context from their sources.  Any button in the match list
  310. may be activated as usual.  An Action Key press on the surrounding
  311. context jumps to the associated source line or a press on the filename
  312. preceding the matches jumps to the file without selecting a particular
  313. line.
  314.  
  315.    There are presently no user-level facilities for globally locating
  316. buttons created by others or for searching on particular button
  317. attributes.
  318.  
  319. 
  320. File: hyperbole.info,  Node: Button Files,  Next: Buttons in Mail,  Prev: Location,  Up: Working with Explicit Buttons
  321.  
  322. Button Files
  323. ------------
  324.  
  325.    It is often convenient to create lists of buttons that can be used as
  326. menus to provide centralized access to distributed information pools or
  327. for other purposes.  These files can serve as useful roadmaps to help
  328. efficiently guide a user through both unfamiliar and highly familiar
  329. information spaces.  Files that are created specifically for this
  330. purpose, we call "button files".
  331.  
  332.    The Hyperbole menu system provides quick access to two types of these
  333. button files: personal and directory-specific, through the ButFile menu.
  334. (The variable, HBMAP:FILENAME, contains the base name of these standard
  335. button files.  Its standard value is `HYPB'.)
  336.  
  337.    A personal button file may serve as a user's own roadmap to
  338. frequently used resources.  Selection of the ButFile/PersonalFile menu
  339. item displays this file for editing.  The default personal button file
  340. is stored within the directory given by the HBMAP:DIR-USER variable
  341. whose standard value is `~/.hyperb'.  The standard Hyperbole
  342. configuration also appends all global buttons to the end of this file,
  343. one per line, as they are created.  So you can edit or annotate them
  344. within the file.
  345.  
  346.    A directory-specific button file may exist for each file system
  347. directory.  Such files are useful for explaining the contents of
  348. directories and pointing readers to particular highlights within the
  349. directories.  Selection of the ButFile/DirFile menu item displays the
  350. button file for the current directory; this provides an easy means of
  351. updating this file when working on a file within the same directory.
  352. If you want to view some other directory-specific button file, simply
  353. use the normal Emacs file finding commands.
  354.  
  355.    One might suggest that menu quick access be provided for
  356. group-specific and site-specific button files.  Instead, link buttons
  357. to such things should be placed at the top of your personal button
  358. file.  This provides a more flexible means of quick access.
  359.  
  360. 
  361. File: hyperbole.info,  Node: Buttons in Mail,  Next: Buttons in News,  Prev: Button Files,  Up: Working with Explicit Buttons
  362.  
  363. Buttons in Mail
  364. ---------------
  365.  
  366.    Hyperbole allows the embedding of buttons within electronic mail
  367. messages that are composed in Emacs with the standard `(mail)' command,
  368. normally bound to {`C-x m'} or with other Emacs-based mail composing
  369. functions.  An enhanced mail reader can then be used to activate the
  370. buttons within messages just like any other buttons.
  371.  
  372.    Hyperbole automatically supports the Rmail, see *Note Rmail:
  373. (emacs)Rmail, VM, see *Note Introduction: (vm)Introduction, and MH-e
  374. mail readers.  Button inclusion and activation within USENET news
  375. articles is also supported in the same fashion via the GNUS news
  376. reader, see *Note Introduction: (gnus)Introduction, if available at
  377. your site.  (The `hmail.el' file provides a generalized interface that
  378. can be used to hook in other mail or news readers if the necessary
  379. interface functions are written.)
  380.  
  381.    All explicit buttons to be mailed must be created within the outgoing
  382. message buffer. There is no present support for including text from
  383. other buffers or files which contain explicit buttons, except for the
  384. ability to yank the contents of a message being replied to, together
  385. with all of its buttons, via the `(mail-yank-original)' command bound
  386. to {`C-c C-y'}.  From a user's perspective, buttons are created in
  387. precisely the same way as in any other buffer.  They also appear just
  388. like any other buttons to both the message sender and the reader who
  389. uses the Hyperbole enhanced readers.  Button operation may be tested
  390. any time before a message is sent.  A person who does not use Hyperbole
  391. enhanced mail readers can still send messages with embedded buttons
  392. since mail composing is independent of any mail reader choice.
  393.  
  394.    Hyperbole buttons embedded within received mail messages act just
  395. like any other buttons.  The mail does not contain any of the action
  396. type definitions used by the buttons, so the receiver must have these
  397. or she will receive an error when she activates the buttons.  Buttons
  398. which appear in message *Subject* lines are copied to summary buffers
  399. whenever such summaries are generated.  Thus, they may be activated from
  400. either the message or summary buffers.
  401.  
  402.    Nothing bad will happen if a mail message with explicit buttons is
  403. sent to a non-Hyperbole user.  The user will simply see the text of the
  404. message followed by a series of lines of button data at its end.
  405. Hyperbole mail users never see this data in its raw form.
  406.  
  407.    In order to alert readers of your mail messages that you can utilize
  408. Hyperbole mail buttons, the system automatically inserts a comment into
  409. each mail message that you compose to announce this fact.  The variable,
  410. SMAIL:COMMENT controls this behavior.  See its documentation for
  411. technical details.  By default, it produces a message of the form:
  412.  
  413.      Comments: Hyperbole mail buttons accepted, vX.XX.
  414.  
  415. where the X's indicate your Hyperbole version number.  You can cut this
  416. out of particular messages before you send them.  If you don't want any
  417. message at all, add the following to your `~/.emacs' file before the
  418. point at which you load Hyperbole.
  419.  
  420.    `(setq smail:comment nil)'
  421.  
  422.    A final mail-related facility provided by Hyperbole is the ability to
  423. save a pointer to a received mail message by creating an explicit button
  424. with a `link-to-mail' action type.  When prompted for the mail message
  425. to link to, if you press the Action Key on an Rmail message, the
  426. appropriate parameter will be copied to the argument prompt, as
  427. described in *Note Entering Arguments::.
  428.  
  429. 
  430. File: hyperbole.info,  Node: Buttons in News,  Prev: Buttons in Mail,  Up: Working with Explicit Buttons
  431.  
  432. Buttons in News
  433. ---------------
  434.  
  435.    Explicit buttons may be embedded within outgoing USENET news articles
  436. and may be activated from news articles that are being read.  This
  437. support is available for the GNUS news reader.  It is enabled by default
  438. within `hsite.el' by autoloading the `hgnus.el' file.
  439.  
  440.    All Hyperbole support should work just as it does when reading or
  441. sending mail.  *Note Buttons in Mail::.  When reading news, buttons
  442. which appear in message *Subject* lines may be activated within the GNUS
  443. subject buffer as well as the article buffer.  When posting news, the
  444. *post-news* buffer is used for outgoing news articles rather than the
  445. *mail* buffer.
  446.  
  447.    Remember that the articles you post do not contain the action type
  448. definitions used by the buttons, so the receiver must have these or she
  449. will receive an error when he activates the buttons.  You should also
  450. keep in mind that most USENET readers will not be using Hyperbole, so if
  451. they receive a news article containing explicit buttons, they will
  452. wonder what the button data at the end of the message is.  You should
  453. therefore limit distribution of such messages.  For example, if most
  454. people at your site read news with GNUS and use Hyperbole, it would be
  455. reasonable to embed buttons in postings to local newsgroups.
  456.  
  457.    In order to alert readers of your postings that you can utilize
  458. Hyperbole mail buttons embedded within personal replies, the system
  459. automatically inserts the same comment that is included within mail
  460. messages to announce this fact.  *Note Buttons in Mail::, for details
  461. and an explanation of how to turn this feature off.
  462.  
  463. 
  464. File: hyperbole.info,  Node: Outliner,  Next: Rolodex,  Prev: Working with Explicit Buttons,  Up: Using Hyperbole
  465.  
  466. Outliner Operation
  467. ==================
  468.  
  469.    The Hyperbole outliner produces structured, autonumbered documents
  470. composed of hierarchies of cells.  Each cell has two identifiers, a
  471. relative autonumber indicating its present position within the outline
  472. and a permanent identifier suitable for use within hyperlink references
  473. to the cell.
  474.  
  475.    The outliner only works under GNU Emacs version 19 or higher and
  476. XEmacs version 19.9 or higher.  You can tell whether you are running a
  477. version of Emacs which supports the outliner by hitting {`C-h h'} to
  478. display the Hyperbole menu.  If you see an `Otl/' entry in the menu,
  479. then the outliner is available.  Otherwise, the outliner does not work
  480. with your version of Emacs, so this section of the manual will not be
  481. of interest to you.
  482.  
  483.    The outliner is not yet fully documented within this manual.  Full
  484. documentation will be available with version 4 of Hyperbole, after the
  485. outliner has been through user testing.
  486.  
  487.    In the mean time, a brief explanation of the outliner is offered
  488. within the `EXAMPLE.kotl' file.  This is an actual outline file that
  489. explains basic operational details of the outliner.  Use the
  490. `Otl/Example' menu entry to display this file.
  491.  
  492.    *Note Outliner Keys::, for a full summary of the key bindings and
  493. commands available in the outliner.
  494.  
  495.    You can create and experiment with outline files by editing a file
  496. with the `.kotl' suffix.  `.kot' will also work for
  497. DOS/Windows-impaired users.  The outliner menu, *Note Outliner Menu::,
  498. also contains a `Create' item.
  499.  
  500. * Menu:
  501.  
  502. * Outliner Menu::
  503. * Outliner History::
  504.  
  505. 
  506. File: hyperbole.info,  Node: Outliner Menu,  Next: Outliner History,  Prev: Outliner,  Up: Outliner
  507.  
  508. Outliner Menu
  509. -------------
  510.  
  511.    The Otl/ menu entry on the Hyperbole top-level menu provides access
  512. to a number of major outliner commands:
  513.  
  514.      Menu Item    Command                    Description
  515.      ====================================================================
  516.      All          kotl-mode:show-all         Expand all cells
  517.      Below        kotl-mode:hide-sublevels   Hide cells deeper than a level
  518.      Create       kfile:find                 Edit or create an outline
  519.      Example      <sample outliner file>     Show self-descriptive example
  520.      Hide         kotl-mode:hide-tree        Hide tree with root at point
  521.      Info         <outliner documentation>   Show outliner manual section
  522.      Kill         kotl-mode:kill-tree        Kill the current tree
  523.      Link         klink:create               Create a link to another cell
  524.      Overview     kotl-mode:overview         Show first line of each cell
  525.      Show         kotl-mode:show-tree        Show tree with root at point
  526.      Top          kotl-mode:top-cells        Collapse to top-level cells
  527.      View         kfile:view                 View an outline read-only
  528.      ====================================================================
  529.  
  530. 
  531. File: hyperbole.info,  Node: Outliner History,  Prev: Outliner Menu,  Up: Outliner
  532.  
  533. Outliner History
  534. ----------------
  535.  
  536.    Much of the Hyperbole outliner design is based upon concepts
  537. pioneered in the NLS/AUGMENT system, `[Eng84a]'.  AUGMENT treated
  538. buffers as a hierarchical set of nodes, called statements; for example,
  539. each paragraph in a document would be treated as a node, with its own
  540. address.  The system could rapidly change the view of a buffer by
  541. collapsing, expanding, clipping, filtering or reordering these nodes.
  542. These facilities aided greatly in idea structuring and
  543. cross-referencing.  Hyperbole version 4 will extend the outliner with
  544. AUGMENT-style flexible views.  Links will be able to specify not only a
  545. referent but also the view style to use when displaying the referent.
  546. This view capability will allow fine control over the presentation of
  547. information displayed by Hyperbole buttons.
  548.  
  549. 
  550. File: hyperbole.info,  Node: Rolodex,  Prev: Outliner,  Up: Using Hyperbole
  551.  
  552. Rolodex Operation
  553. =================
  554.  
  555.    Hyperbole includes a complete, advanced rolodex system, Wrolo, for
  556. convenient management of hierarchical, record-oriented information.
  557.  
  558.    Hyperbole buttons may be included within rolodex records and then
  559. manually activated whenever their records are retrieved.
  560.  
  561.    See the description at the top of the `wrolo.el' file for details on
  562. programmatic interfacing to the rolodex.  The following subsections
  563. explain use and basic customization of the rolodex.
  564.  
  565. * Menu:
  566.  
  567. * Rolo Concepts::
  568. * Rolo Menu::
  569. * Rolo Keys::
  570. * Rolo Settings::
  571.  
  572. 
  573. File: hyperbole.info,  Node: Rolo Concepts,  Next: Rolo Menu,  Prev: Rolodex,  Up: Rolodex
  574.  
  575. Rolo Concepts
  576. -------------
  577.  
  578.    The rolodex manages and searches rolodex files.  A "rolodex file"
  579. consists of an optional header which starts and ends with a line of
  580. equal signs (at least three equal signs starting at the beginning of a
  581. line), followed by any non-negative number of rolodex records.  You must
  582. manually add a header to any rolodex file if you want it to have one.
  583.  
  584. Here is an example of a simple rolodex file.
  585.  
  586.      ==================================================================
  587.                              PERSONAL ROLODEX
  588.      <Last-Name>, <First>  <Co/Categ>  <Email>       W<Work#>   F<Fax#>
  589.      ==================================================================
  590.      *   Smith, John       Motorola    <js@mot.com> W2001      F1892
  591.  
  592.    We call rolodex records, "entries".  Entries begin with a delimiter,
  593. some number of `*' characters at the beginning of a line.  Entries may
  594. be arranged in a hierarchy, where child entries begin with one more `*'
  595. character than do their parents.  Top level entries begin with a single
  596. `*'.
  597.  
  598.    Beyond this initial delimiter, entries are completely free-form text.
  599. It is best to use a "lastname, firstname" format, however, when adding
  600. contact entries into a rolodex.  Then the rolodex system will
  601. automatically keep your entries alphabetized.
  602.  
  603.    Any search done on the rolodex scans the full text of each entry.
  604. During a search, the rolodex file header separator lines and anything in
  605. between are appended to the buffer of matched entries before any entries
  606. are retrieved from the file.  Whenever an entry is matched, it and all
  607. of its descendant entries are retrieved.  If your Emacs version supports
  608. textual highlighting, each search match is highlighted for quick, visual
  609. location.
  610.  
  611. For example, a search on "Company" could retrieve the following:
  612.  
  613.      ==================================================================
  614.                              COMPANY ROLODEX
  615.      ==================================================================
  616.      *    Company
  617.      **     Manager
  618.      ***      Underlings
  619.  
  620. Thus, searching for Company retrieves all listed employees.  Searching
  621. for Manager turns up all Underlings.
  622.  
  623. 
  624. File: hyperbole.info,  Node: Rolo Menu,  Next: Rolo Keys,  Prev: Rolo Concepts,  Up: Rolodex
  625.  
  626. Rolo Menu
  627. ---------
  628.  
  629.    The Rolo/ menu entry on the Hyperbole top-level menu provides the
  630. user interface to the rolodex.  The rolo menu provides access to the
  631. following commands:
  632.  
  633.      Menu Item       Command               Description
  634.      ====================================================================
  635.      Add             rolo-add              Adds a rolodex entry
  636.      Display         rolo-display-matches  Displays last matches again
  637.      Edit            rolo-edit             Edits an existing rolodex entry
  638.      Info                                  Displays Rolodex manual entry
  639.      Kill            rolo-kill             Removes an entry from the rolodex
  640.      Order           rolo-sort             Sorts all levels in rolodex
  641.      RegexFind       rolo-grep             Finds all entries containing
  642.                                              a regular expression
  643.      StringFind      rolo-fgrep            Finds all entries containing
  644.                                              a string
  645.      WordFind        rolo-word             Finds all entries containing
  646.                                              a string of whole words
  647.      Yank            rolo-yank             Inserts first matching rolodex
  648.                                              entry at point
  649.      ====================================================================
  650.  
  651.    A prefix argument used with either of the find commands listed above
  652. limits the search to a maximum number of matches given by the argument.
  653. The search is terminated whenever that number of matches is found.
  654.  
  655.    For any of the above commands that prompt for a name, you may use the
  656. form parent/child to locate a child entry below a parent entry.  So for
  657. a rolodex which looked like so:
  658.  
  659.      *    Company
  660.      **     Manager
  661.      ***      Underlings
  662.  
  663. You could edit the Underlings entry by identifying it as
  664. Company/Manager/Underlings.  Do not use this hierarchical notation in
  665. search expressions since the whole rolodex will be searched anyway.
  666. Thus, "Underlings" as a search pattern will find an entry containing
  667. "Underlings" at any level in a hierarchy, like so:
  668.  
  669.      ***      Underlings
  670.  
  671. 
  672. File: hyperbole.info,  Node: Rolo Keys,  Next: Rolo Settings,  Prev: Rolo Menu,  Up: Rolodex
  673.  
  674. Rolo Keys
  675. ---------
  676.  
  677.    After a rolodex search is performed, point is left in the "rolodex
  678. match buffer", `*Rolodex*', which uses `wrolo-mode' to simplify
  679. browsing many rolodex matches.  Press {`?'} when in the match buffer
  680. for a summary of available keys.
  681.  
  682.    If your Emacs version supports textual highlighting, each search
  683. match is highlighted for quick, visual location.  {TAB} moves point
  684. forward to successive spans of text which match the search expression.
  685. {`M-TAB'} or {`r'} moves point backward to earlier matches.  These keys
  686. allow you to quickly find the matching entry of most interest to you if
  687. your search expression failed to narrow the matches sufficiently.
  688.  
  689.    Single key outlining commands are also available for browsing
  690. matches.  If your search matches a large number of entries, use {`t'}
  691. to get a top-level overview of all the entries.  Each entry is
  692. collapsed so that only its first line shows.  Press {`s'} to show
  693. (expand) the entry at point.  Use {`h'} to hide (collapse) the entry
  694. again.  Press {`a'} to expand all entries in the buffer.
  695.  
  696.    Many other keys are defined to help you move through matching
  697. entries.
  698.  
  699. `b'
  700.      Move to the previous entry at the same level as the current entry.
  701.  
  702. `f'
  703.      Move to the next entry at the same level as the current entry.
  704.  
  705. `n'
  706.      Move to the next entry at any level.
  707.  
  708. `p'
  709.      Move to the previous entry at any level.
  710.  
  711. `u'
  712.      Move the the previous entry one level up.
  713.  
  714. `.'
  715. `<'
  716.      Move to the beginning of the buffer.
  717.  
  718. `,'
  719. `>'
  720.      Move to the end of the buffer.
  721.  
  722. `DEL'
  723.      Scroll backward a windowful.
  724.  
  725. `SPC'
  726.      Scroll forward a windowful.
  727.  
  728.    Once you have found an entry of interest and you want to remove the
  729. rolodex match buffer, use {`q'} to quit.  This will restore your
  730. current frame to its state prior to the rolodex search.
  731.  
  732. 
  733. File: hyperbole.info,  Node: Rolo Settings,  Prev: Rolo Keys,  Up: Rolodex
  734.  
  735. Rolo Settings
  736. -------------
  737.  
  738.    If textual highlighting is available in your Emacs on your current
  739. display type, the rolodex uses the value of ROLO-HIGHLIGHT-FACE as the
  740. face to use to highlight search matches.
  741.  
  742.    The buffers containing the rolodex files are not killed after a
  743. search on the assumption that another search is likely to follow within
  744. this Emacs session.  You may wish to change this behavior with the
  745. following setting: `(setq rolo-kill-buffers-after-use t)'.
  746.  
  747.    After an entry is killed, the modified rolodex file is automatically
  748. saved.  If you would rather always save files yourself, use this
  749. setting: `(setq rolo-save-buffers-after-use nil)'.
  750.  
  751.    When adding an entry from within a buffer containing a mail message,
  752. the rolodex add function will extract the sender's name and e-mail
  753. address and prompt you with the name as a default.  If you accept it,
  754. it will enter the name and the email address using the format given by
  755. the ROLO-EMAIL-FORMAT variable.  See its documentation if you want to
  756. change its value.
  757.  
  758.    The files used in any rolodex search are given by the ROLO-FILE-LIST
  759. variable, whose default value is `("~/.rolodex.otl")', so that searches
  760. initially scan only your personal rolodex.  Any entries added to this
  761. list should be file pathnames.  If a file in the list does not exist or
  762. is not readable, it is skipped.  Files are searched in the order in
  763. which they appear in the list.  In general, you should leave your
  764. personal rolodex file as the first entry in the list, since this is the
  765. only file to which the rolo menu Add command adds entries.
  766.  
  767.    The rolodex entry start delimiter is given by the regular expression
  768. variable, ROLO-ENTRY-REGEXP, whose default value is "^\*+".
  769.  
  770.    A rolodex file may begin with an optional header section which is
  771. copied to the match display buffer whenever any matches are found
  772. during a search.  The start and end lines of this header are controlled
  773. by the regular expression variable, ROLO-HDR-REGEXP, whose default
  774. value is "^===".  This allows lines of all equal signs to visually
  775. separate matching entries from multiple files retrieved from a single
  776. search.
  777.  
  778. 
  779. File: hyperbole.info,  Node: Developing with Hyperbole,  Next: Glossary,  Prev: Using Hyperbole,  Up: Top
  780.  
  781. Developing with Hyperbole
  782. *************************
  783.  
  784.    This chapter is only for people who are familiar with Emacs Lisp and
  785. wish to extend Hyperbole, customize Hyperbole or develop other systems
  786. using Hyperbole as a base.
  787.  
  788. * Menu:
  789.  
  790. * Hook Variables::
  791. * Creating Types::
  792. * Explicit Button Technicalities::
  793. * Encapsulating Systems::
  794. * Embedding Hyperbole::
  795.  
  796. 
  797. File: hyperbole.info,  Node: Hook Variables,  Next: Creating Types,  Prev: Developing with Hyperbole,  Up: Developing with Hyperbole
  798.  
  799. Hook Variables
  800. ==============
  801.  
  802.    Hyperbole provides a number of hook variables that allow you to
  803. adjust its basic operations to meet your own needs, without requiring
  804. you to change the code for those operations.
  805.  
  806.    We find it best to always set the value of hook variables either to
  807. nil or to a list of function names of no arguments, each of which will
  808. be called in sequence when the hook is triggered.
  809.  
  810.    Given the name of a function, a Hyperbole hook variable triggered
  811. within that function has the same name as the function with a `-hook'
  812. appended.  Hyperbole provides the following hook variables:
  813.  
  814. HYPERB:INIT-HOOK
  815.      For customization at Hyperbole initialization time.  Use this to
  816.      load any personal Hyperbole type definitions you might have.  It
  817.      is run after Hyperbole support code is loaded but before Hyperbole
  818.      session initializations take place.
  819.  
  820. ACTION:ACT-HOOK
  821.      Run before each Hyperbole button activation.  The variable
  822.      HBUT:CURRENT contains the button to be activated when this is run.
  823.  
  824. EBUT:CREATE-HOOK
  825.      To add to the Hyperbole explicit button creation process.
  826.  
  827. EBUT:DELETE-HOOK
  828.      To add to the Hyperbole explicit button deletion process.
  829.  
  830. EBUT:MODIFY-HOOK
  831.      Executed when an explicit button's attributes are modified.
  832.  
  833. HIBTYPES:BEGIN-LOAD-HOOK
  834.      Executed prior to loading of standard Hyperbole implicit button
  835.      types.  Used to load site-specific low priority implicit button
  836.      types since lowest priority ibtypes are loaded first.
  837.  
  838. HIBTYPES:END-LOAD-HOOK
  839.      Executed after loading of standard Hyperbole implicit button types.
  840.      Used to load site-specific high priority implicit button types
  841.      since highest priority ibtypes are loaded last.
  842.  
  843. HTYPE:CREATE-HOOK
  844.      Executed when a Hyperbole type (e.g. action type or implicit button
  845.      type) is added to the environment.
  846.  
  847. HTYPE:DELETE-HOOK
  848.      Executed when a type is deleted from the environment.
  849.  
  850. KOTL-MODE-HOOK
  851.      Executed when a Koutline is created or read in or when kotl-mode is
  852.      invoked.
  853.  
  854. Hyperbole also makes use of a number of external Emacs hook variables.
  855.  
  856. FIND-FILE-HOOKS
  857.      This is called whenever a file is read into a GNU Emacs buffer.
  858.      Hyperbole uses it to highlight any buttons within files when run
  859.      under any NEXTSTEP or X window system-based versions of GNU Emacs.
  860.  
  861. WRITE-FILE-HOOKS
  862.      This is called whenever a GNU Emacs buffer is written to a file.
  863.      Hyperbole uses it to save any modified button data associated with
  864.      the file's directory.
  865.  
  866.      Hyperbole mail and news facilities also utilize a number of
  867.      external hook variables.  These hide button data and highlight
  868.      buttons if possible.  See the various support files for details.
  869.  
  870. 
  871. File: hyperbole.info,  Node: Creating Types,  Next: Explicit Button Technicalities,  Prev: Hook Variables,  Up: Developing with Hyperbole
  872.  
  873. Creating Types
  874. ==============
  875.  
  876. To define or redefine a single Hyperbole type, you may either:
  877.    * move your Emacs point to within the type definition and use
  878.      {`C-M-x'} `(eval-defun)' (only works in Emacs Lisp mode);
  879.  
  880.    * or move your point to the end of the last line of the type
  881.      definition and use {`C-x C-e'} `(eval-last-sexp)' (works in most
  882.      modes).
  883.  
  884.    The functions from the `htype' class may be applied to any Hyperbole
  885. types, if needed.
  886.  
  887.    The following subsections explain the specifics of Hyperbole type
  888. definitions which are beyond standard practice for Emacs Lisp
  889. programming.  See the definitions of the standard types in `hactypes.el'
  890. and `hibtypes.el' for examples.
  891.  
  892. * Menu:
  893.  
  894. * Action Types::
  895. * Implicit Button Types::
  896.  
  897. 
  898. File: hyperbole.info,  Node: Action Types,  Next: Implicit Button Types,  Prev: Creating Types,  Up: Creating Types
  899.  
  900. Action Types
  901. ------------
  902.  
  903.    New forms of explicit buttons may be created by adding new action
  904. types to a Hyperbole environment.  The file, `hactypes.el', provides
  905. many examples of working action types.
  906.  
  907.    An action type is created, i.e. loaded into the Hyperbole
  908. environment, with the `(defact)' function (which is an alias for
  909. `(actype:create)').  The calling signature for this function is given
  910. in its documentation; it is the same as that of `(defun)' except that a
  911. documentation string is required.  (An interactive calling form is also
  912. required if the action type has formal parameters and is to be used in
  913. explicit button definitions.  Implicit buttons never use an action
  914. type's interactive form.  It is good practice to include an interactive
  915. form since the type creator cannot know how users may choose to apply
  916. the type.)
  917.  
  918.    An action type's parameters are used differently than those of a
  919. function being called.  Its interactive calling form is used when an
  920. explicit button is created to prompt for type-specific button
  921. attributes.  The rest of its body is used when a button with that action
  922. type is activated.  Then the button attributes together with the action
  923. type body are used to form an action that is executed in response to the
  924. button activation.  The action's result is returned to the action caller
  925. unless it returns nil, in which case t is returned to the caller to
  926. ensure that it registers the performance of the action.
  927.  
  928.    An action type body may perform any computation using Emacs Lisp and
  929. Hyperbole functions.
  930.  
  931.    The interactive calling form for an action type is of the same form
  932. as that of a regular Emacs Lisp function definition (see the
  933. documentation for the Emacs Lisp `(interactive)' form).  It may
  934. additionally use Hyperbole command character extensions when the form
  935. is given as a string.  Each such extension character *must* be preceded
  936. by a plus sign, `+', in order to be recognized since such characters
  937. may also have standard interactive form meanings.
  938.  
  939.    The present Hyperbole extension characters are:
  940.  
  941. *+I*
  942.      Prompts for an existing Info node name and file.
  943.  
  944. *+K*
  945.      Prompts for an existing kcell identifier, either a full outline
  946.      level identifier or a permanent idstamp.
  947.  
  948. *+M*
  949.      Prompts for a mail message date and the file name it resides in.
  950.      The mail parameters prompted for by this character code are likely
  951.      to change in the future.
  952.  
  953. *+V*
  954.      Prompts for a Hyperbole view specification.  Not yet available for
  955.      use.
  956.  
  957.    Arguments are read by the functions in Hyperbole's `hargs' class,
  958. rather than the standard Lisp `read' functions, in order to allow
  959. direct selection of arguments via the Action Key.
  960.  
  961.    If an action type create is successful, the symbol that Hyperbole
  962. uses internally to reference the type is returned.  `Nil' is returned on
  963. failure so that you may test whether or not the operation succeeds.
  964.  
  965.    Once you have defined an action type within your present Hyperbole
  966. environment, you can create new explicit buttons which use it.  There is
  967. no explicit button type beyond its action type, so no further work is
  968. necessary.
  969.  
  970.    Call `(actype:delete)' to remove an action type from a Hyperbole
  971. environment.  It takes a single parameter which should be the same type
  972. symbol used in the type definition call (not the Hyperbole symbol
  973. returned by the call).
  974.  
  975. 
  976. File: hyperbole.info,  Node: Implicit Button Types,  Prev: Action Types,  Up: Creating Types
  977.  
  978. Implicit Button Types
  979. ---------------------
  980.  
  981.    An implicit button type is created or loaded via the `(defib)'
  982. function (which is an alias for `(ibtype:create)').  The calling
  983. signature for this function is given in its documentation; it is the
  984. same as that of `(defun)', but with a number of constraints.  The
  985. parameter list should always be empty since no parameters will be used.
  986. A documentation string is required.  The type's body follows this.
  987.  
  988.    The body of an implicit button type is a predicate which determines
  989. whether or not point is within an implicit button of the type.  If not,
  990. the predicate returns `nil'.  If so, it may optionally setup to flash
  991. the button and then perform one or more actions.  A call of the form:
  992. `(ibut:label-set label start-pos end-pos)' is used to setup the button
  993. flashing, if desired.  This is then typically immediately followed by
  994. an action invocation of the form: `(hact 'actype &rest
  995. actype-arguments)'.  It is imperative that all actions (non-predicate
  996. code) be invoked through the `(hact)' function rather than directly or
  997. your ibtypes will not work properly.  (Hyperbole first tests to see if
  998. any ibtype matches the current context before activating any type, so
  999. it ensures that `(hact)' calls are disabled during this testing.)  Any
  1000. action types used may be created before or after the implicit button
  1001. type definition but obviously should be defined before any implicit
  1002. buttons of the given type are activated; an error will result,
  1003. otherwise.
  1004.  
  1005.    If an implicit button type create is successful, the symbol that
  1006. Hyperbole uses internally to reference the type is returned.  `Nil' is
  1007. returned on failure so that you may test whether or not the operation
  1008. succeeds.  Implicit button type names and action type names may be the
  1009. same without any conflict.  In fact, such naming is encouraged when an
  1010. implicit button type is the exclusive user of an action type.
  1011.  
  1012.    Call `(ibtype:delete)' to remove an implicit button type from a
  1013. Hyperbole environment.  It takes a single parameter which should be the
  1014. same type symbol used in the type definition call (not the Hyperbole
  1015. symbol returned by the call).  This will not delete the action type used
  1016. by the implicit button; that must be done separately.
  1017.  
  1018.    By default, a request for help on an implicit button will display the
  1019. button's attributes in the same manner as is done for explicit buttons.
  1020. For some implicit button types, other forms of help will be more
  1021. appropriate.  If an Emacs Lisp function is defined whose name is formed
  1022. from the concatenation of the type name followed by `:help', e.g.
  1023. `my-ibtype:help', it is used to respond to requests for help on buttons
  1024. of that type.  Any such function should take a single argument of an
  1025. implicit button construct.  (This is what `(ibut:at-p)' returns when
  1026. point is within an implicit button context.)  The button may be queried
  1027. for its attributes using functions from the `hbut' and `hattr' classes.
  1028. See the `hib-kbd.el' file for an example of a custom help function.
  1029.  
  1030. 
  1031. File: hyperbole.info,  Node: Explicit Button Technicalities,  Next: Encapsulating Systems,  Prev: Creating Types,  Up: Developing with Hyperbole
  1032.  
  1033. Explicit Button Technicalities
  1034. ==============================
  1035.  
  1036. * Menu:
  1037.  
  1038. * Button Label Normalization::
  1039. * Operational and Storage Formats::
  1040. * Programmatic Button Creation::
  1041.  
  1042. 
  1043. File: hyperbole.info,  Node: Button Label Normalization,  Next: Operational and Storage Formats,  Prev: Explicit Button Technicalities,  Up: Explicit Button Technicalities
  1044.  
  1045. Button Label Normalization
  1046. --------------------------
  1047.  
  1048.    Hyperbole uses a normalized form of button labels called button keys
  1049. (or label keys) for all internal operations.  See the documentation for
  1050. the function `(hbut:label-to-key)' for details of the normalization
  1051. process.  The normalized form permits Hyperbole to recognize buttons
  1052. that are the same but whose labels appear different from one another,
  1053. due to text formatting conventions.  For example, all of the following
  1054. would be recognized as the same button.
  1055.  
  1056.        <(fake button)>     <( fake      button)>
  1057.      
  1058.        Pam>  <(fake
  1059.        Pam>    button)>
  1060.      
  1061.        ;; <(fake
  1062.        ;;   button)>
  1063.      
  1064.        /* <( fake      */
  1065.        /*    button )> */
  1066.  
  1067.    The last three examples demonstrate how Hyperbole ignores common fill
  1068. prefix patterns that happen to fall within the middle of a button label
  1069. that spans multiple lines.  As long as such buttons are selected with
  1070. point at a location within the label's first line, the button will be
  1071. recognized.  The variable HBUT:FILL-PREFIX-REGEXPS holds the list of
  1072. fill prefixes recognized when embedded within button labels.  All such
  1073. prefixes are recognized (one per button label), regardless of the
  1074. setting of the GNU Emacs variable, FILL-PREFIX, so no user intervention
  1075. is required.
  1076.  
  1077. 
  1078. File: hyperbole.info,  Node: Operational and Storage Formats,  Next: Programmatic Button Creation,  Prev: Button Label Normalization,  Up: Explicit Button Technicalities
  1079.  
  1080. Operational and Storage Formats
  1081. -------------------------------
  1082.  
  1083.    Hyperbole uses a terse format to store explicit buttons and a more
  1084. meaningful one to show users and to manipulate during editing.  The
  1085. terse format consists solely of button attribute values whereas the edit
  1086. format includes an attribute name with each attribute value.  A button
  1087. in edit format consists of a Lisp symbol together with its attribute
  1088. list which holds the attribute names and values.  In this way, buttons
  1089. may be passed along from function to function simply by passing the
  1090. symbol to which the button is attached.  Most functions utilize the
  1091. pre-defined HBUT:CURRENT symbol by default to store and retrieve the
  1092. last encountered button in edit format.
  1093.  
  1094.    The `hbdata' class handles the terse, stored format.  The `hbut',
  1095. `ebut', and `ibut' classes work with the name/value format.  This
  1096. separation permits the wholesale replacement of the storage manager
  1097. with another, with any interface changes hidden from any Hyperbole
  1098. client programming.
  1099.  
  1100. 
  1101. File: hyperbole.info,  Node: Programmatic Button Creation,  Prev: Operational and Storage Formats,  Up: Explicit Button Technicalities
  1102.  
  1103. Programmatic Button Creation
  1104. ----------------------------
  1105.  
  1106.    A common need when developing with Hyperbole is the ability to
  1107. create or modify explicit buttons without user interaction.  For
  1108. example, an application might require the addition of an explicit
  1109. summary button to a file for each new mail message a user reads that
  1110. contains a set of keywords.  The user could then check the summary file
  1111. and jump to desired messages quickly.
  1112.  
  1113.    The Hyperbole class `ebut' supports programmatic access to explicit
  1114. buttons.  See it within the `hbut.el' file for full details.  The
  1115. documentation for `(ebut:create)' explains the set of attributes
  1116. settings necessary to create an explicit button.  For operations over
  1117. the whole set of buttons within the visible (non-narrowed) portion of a
  1118. buffer, use the `(ebut:map)' function.
  1119.  
  1120. 
  1121. File: hyperbole.info,  Node: Encapsulating Systems,  Next: Embedding Hyperbole,  Prev: Explicit Button Technicalities,  Up: Developing with Hyperbole
  1122.  
  1123. Encapsulating Systems
  1124. =====================
  1125.  
  1126.    A powerful use of implicit button types is to provide a
  1127. Hyperbole-based interface to external systems.  The basic idea is to
  1128. interpret patterns within the application's displays as implicit
  1129. buttons.  See the `hsys-*' files for examples of how to do this.
  1130.  
  1131.